package com.tanzc.util;

/**
 * <p> description: desc</p>
 *
 * @author tanzc
 * @date 2021/12/27
 **/
public class ArrayUtils {
    /**
     * 生成随机数
     *
     * @param num
     * @param max
     * @return
     */
    public static int[] random(int num, int max) {
        int[] arr = new int[num];
        for (int i = 0; i < num; i++) {
            int x = (int) (Math.random() * (max + 1));
            arr[i] = x;
        }
        System.out.println("待排序数据形式: 5 6 11 7 13 9 14 2 15 8");
        System.out.println("序列长度：" + num);
        return arr;
    }

    /**
     * 生成随机数，添加偏移，避免从0开始的序列元素，在某些算法下的问题被掩盖掉
     *
     * @param num
     * @param max
     * @return
     */
    public static int[] randomoffset(int num, int max, int offset) {
        int[] arr = new int[num];
        for (int i = 0; i < num; i++) {
            int x = (int) (Math.random() * (max + 1) + offset);
            arr[i] = x;
        }
        System.out.println("待排序数据形式: 5 6 11 7 13 9 14 2 15 8");
        System.out.println("序列长度：" + num);
        return arr;
    }

    /**
     * 最好情况
     * @param num
     * @return
     */
    public static int[] nice(int num) {
        int[] arr = new int[num];
        for (int i = 0; i < num; i++) {
            arr[i] = i;
        }
        System.out.println("待排序数据形式: 1 2 3 4 5 6 7 8 9 10");
        System.out.println("序列长度：" + num);
        return arr;
    }

    /**
     * 最坏情况
     * @param num
     * @return
     */
    public static int[] worst(int num) {
        int[] arr = new int[num];
        for (int i = 0; i < num; i++) {
            arr[i] = num - i;
        }
        System.out.println("待排序数据形式: 10 9 8 7 6 5 4 3 2 1");
        System.out.println("序列长度：" + num);
        return arr;
    }

    /**
     * 一半最好，一半最坏
     * @param num
     * @return
     */
    public static int[] bad(int num) {
        int[] arr = new int[num];
        for (int i = 0; i < num / 2; i++) {
            arr[i] = num / 2 - i;
        }
        for (int i = num / 2; i < num; i++) {
            arr[i] = i;
        }
        System.out.println("待排序数据形式: 5 4 3 2 1 6 7 8 9 10");
        System.out.println("序列长度：" + num);
        return arr;
    }

    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.printf("%d ", arr[i]);
        }
        System.out.println();
    }
}
